package us.achromaticmetaphor.imcktg; import java.text.Normalizer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import android.os.Build; public abstract class Morse { public static final int unitsPerWord = 50; // PARIS method public static final char dotChar = '.'; public static final char dashChar = '-'; public static final char pauseChar = ' '; private static void morse(String s, List<String> sb) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) s = Normalizer.normalize(s, Normalizer.Form.NFKD); s = s.toLowerCase(Locale.getDefault()); s.replaceAll("\\s+", " "); for (char c : s.toCharArray()) if(IMCmap.containsKey(c)) sb.add(IMCmap.get(c)); } public static int numPulses(String s) { int pulses = 0; for (int i = 0; i < s.length(); i++) pulses += s.charAt(i) == '-' ? 4 : 2; return pulses; } public static int numPulses(Iterable<String> mcs) { int pulses = 0; for (String s : mcs) pulses += 2 + numPulses(s); return pulses; } public static List<String> morse(String s) { List<String> l = new ArrayList<String>(s.length()); morse(s, l); return l; } private static final Map<Character, String> IMCmap; static { final String [] IMC = { "a.-", "b-...", "c-.-.", "d-..", "e.", "f..-.", "g--.", "h....", "i..", "j.---", "k-.-", "l.-..", "m--", "n-.", "o---", "p.--.", "q--.-", "r.-.", "s...", "t-", "u..-", "v...-", "w.--", "x-..-", "y-.--", "z--..", "1.----", "2..---", "3...--", "4....-", "5.....", "6-....", "7--...", "8---..", "9----.", "0-----", "..-.-.-", ",--..--", ":---...", "?..--..", "'.----.", "--....-", "/-..-.", "(-.--.", ")-.--.-", "\".-..-.", "=-...-", "+.-.-.", "@.--.-.", " ", "E........" }; Map<Character, String> m = new HashMap<Character, String>(); for (String s : IMC) m.put(s.charAt(0), s.substring(1)); IMCmap = Collections.unmodifiableMap(m); } }